TypeScriptãšæååæã®é åçãªäº€å·®ç¹ãæ¢çŽ¢ããŸããåã·ã¹ãã ãããã«æåçæŠå¿µãã¢ãã«åããåæ ã§ããããåŠã³ãŸãã
TypeScript人é¡åŠïŒåå®è£ ãéããæååæ
ãœãããŠã§ã¢éçºã®äžçã«ãããŠãTypeScriptã¯åãªãããŒã¿æ€èšŒãè¶ ãã匷åãªåã·ã¹ãã ãæäŸããŸããããã¯ãè€éãªé¢ä¿æ§ãå¶çŽãæ¯ãèããã³ãŒãã«çŽæ¥çµã¿èŸŒãããšãå¯èœã«ããŸãããããããããã®åããããã«è€éãªãã®ãããªãã¡æåãã¢ãã«åããããã«äœ¿ãããšãããã©ãã§ããããïŒãã®ããã°æçš¿ã§ã¯ãåã·ã¹ãã ãçšããŠæåçæŠå¿µãåæã»è¡šçŸãããæ°èåéãTypeScript人é¡åŠããæ¢æ±ããŸãã
顿šïŒããŒã¿æ§é ããæåæ§é ãž
å
žåçãªããŒã¿æ§é ãèããŠã¿ãŸããããäŸãã°ãUserãªããžã§ã¯ãã¯ãnameãageãlocationãšãã£ãããããã£ãæã€ãããããŸããããããã®ããããã£ã¯ãã·ã¹ãã å
ã®å人ã®å±æ§ã衚ããŸããåæ§ã«ãæåçæŠå¿µã屿§ãšé¢ä¿æ§ãæã€ãšèããããšãã§ããŸããäŸãã°ããå®¶æããšããæŠå¿µã¯ããæ§é ãïŒæ žå®¶æãæ¡å€§å®¶æãªã©ïŒãã圹å²ãïŒç¶ãæ¯ãåïŒããããŠã責任ããšãã£ã屿§ãæã€ãããããŸããã
ãããã®æåç屿§ãTypeScriptã®åã«ãããã³ã°ããããšã§ããããã®æŠå¿µã«ã€ããŠããã°ã©ã çã«æšè«ããæäœããããšãå¯èœã«ãã圢åŒçãªè¡šçŸãäœæã§ããŸããããã¯æåãã³ãŒãã«éå ããã®ã§ã¯ãªããã³ãŒãããã®æ ¹åºã«ããæ§é ãçè§£ãåæããããã®ããŒã«ãšããŠäœ¿çšããããšã§ãã
TypeScript人é¡åŠã®äž»èŠãªæŠå¿µ
1. æåçãªã¢ãŒãã£ãã¡ã¯ããšããŠã®å
ããããã®å宣èšã¯ãæ å ±ã®æçãã©ã®ããã«åé¡ãã衚çŸãããã«ã€ããŠã®æ±ºå®ã衚ããŸããåã·ã¹ãã ãèšèšããäžã§ç§ãã¡ãè¡ãéžæã¯ãç§ãã¡ã®æ ¹åºã«ããåæãåèŠãåæ ããŠããŸãã以äžã®äŸãèããŠã¿ãŸãããã
äŸ1ïŒãžã§ã³ããŒè¡šçŸ
åçŽãªGenderåã¯æ¬¡ã®ããã«ãªããããããŸããã
type Gender = "Male" | "Female";
ãããããã®äºå çãªè¡šçŸã¯ãããåºç¯ãªãžã§ã³ããŒã»ã¢ã€ãã³ãã£ãã£ãèªèããæåã«ãšã£ãŠã¯é©åã§ãªãå ŽåããããŸããããå æ¬çãªè¡šçŸã¯æ¬¡ã®ããã«ãªãã§ãããã
type Gender = "Male" | "Female" | "Non-Binary" | "Other";
ãããã¯ãããåçã«ïŒ
type Gender = string; // Allowing any string for gender
衚çŸã®éžæã¯ãã·ã¹ãã å ã§ãŠãŒã¶ãŒãã©ã®ããã«æ±ããããã«ã€ããŠéèŠãªæå³ãæã¡ãŸããå宣èšãæèçã«æ€èšããããšã§ãé ããåèŠãæããã«ããææŠããããšãã§ããŸãã
äŸ2ïŒç°ãªãæåã«ãããé¢ä¿æ§ã®ã¹ããŒã¿ã¹
äžéšã®æåã§ã¯ã人éé¢ä¿ã¯çµå©ã«ãã£ãŠå³å¯ã«å®çŸ©ãããŸãããããã£ãŠãé¢ä¿æ§ã®ã¹ããŒã¿ã¹ã衚ãåã«ã¯ããæ¢å©ãããç¬èº«ãããé¢å©ãããæ»å¥ãã®ã¿ãå«ãŸãããããããŸãããããããå€ãã®æåã§ã¯çŸåšã倿§ãªããŒãããŒã·ããã®åœ¢æ ãèªèãããŠããŸãããã®ãããããå æ¬çãªè¡šçŸã«ã¯ãã亀éäžããã忣²äžãããããã¯èªå·±å®çŸ©ã®ã¹ããŒã¿ã¹ãå¯èœã«ããã«ã¹ã¿ã æååãã£ãŒã«ããå«ãŸãããããããŸããã
2. ã€ã³ã¿ãŒãã§ãŒã¹ãšæåçãªåœ¹å²
TypeScriptã®ã€ã³ã¿ãŒãã§ãŒã¹ã¯ããªããžã§ã¯ããåŸãã¹ãå¥çŽãå®çŸ©ããŸããã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããŠãæåçãªåœ¹å²ãšããã«é¢é£ãã責任ãã¢ãã«åã§ããŸããäŸãã°ãæ¶ç©ºã®ã³ãã¥ããã£ã«ããããé·èãã®åœ¹å²ãèããŠã¿ãŸãããã
interface Elder {
provideGuidance(): string;
resolveConflicts(dispute: string): string;
preserveTraditions(): void;
}
ãã®ã€ã³ã¿ãŒãã§ãŒã¹ã¯ããã®ã³ãã¥ããã£ã«ããããé·èãã®åœ¹å²ã«é¢é£ãã責任ãå®çŸ©ããŠããŸãããã®ã€ã³ã¿ãŒãã§ãŒã¹ã®å ·äœçãªå®è£ ã¯ãããããã®è²¬ä»»ã«é¢é£ããç¹å®ã®æ¯ãèããæäŸããã§ããããç°ãªãæåã¯ãç°ãªã瀟äŒç圹å²ã«åºã¥ããŠãåœç¶ãªãããŸã£ããç°ãªãã€ã³ã¿ãŒãã§ãŒã¹ãæã€ããšã«ãªããŸãã
3. ãžã§ããªã¯ã¹ãšæåçé©å¿æ§
ãžã§ããªã¯ã¹ã䜿çšãããšãä»ã®åã«ãã£ãŠãã©ã¡ãŒã¿åãããåãäœæã§ããŸããããã¯ãç°ãªãã³ã³ããã¹ãã§å€åããæåçæŠå¿µãã¢ãã«åããã®ã«åœ¹ç«ã¡ãŸããäŸãã°ããèŽãç©ããšããæŠå¿µã¯ãæåã«ãã£ãŠç°ãªãæå³ãšãããã³ã«ãæã€ãããããŸããããžã§ããªã¯ã¹ã䜿çšããŠãç¹å®ã®æåèŠç¯ã«é©å¿ã§ããæè»ãªGiftåãäœæã§ããŸãã
interface Gift<T> {
item: T;
giver: string;
recipient: string;
culturalContext: string; // e.g., "Japanese", "American", "Nigerian"
protocol: (gift: Gift<T>) => void; // Function describing the gifting process
}
// Example implementation with a string item type
const birthdayGift: Gift<string> = {
item: "Book",
giver: "Alice",
recipient: "Bob",
culturalContext: "American",
protocol: (gift) => {
console.log(`Presenting ${gift.item} to ${gift.recipient} with a smile.`);
}
};
birthdayGift.protocol(birthdayGift);
culturalContextããããã£ã¯ãèŽãç©ãèŽãããæåçãªæèãæå®ããããšãå¯èœã«ããprotocol颿°ã¯ãã®æåã«ãããèŽãç©ã«é¢é£ããç¹å®ã®ååŒãã«ãã»ã«åããŸãã
4. ãŠããªã³åãšæåç倿§æ§
ãŠããªã³åã䜿çšãããšã倿°ãè€æ°ã®åã®ããããã§ããããšãæå®ã§ããŸããããã¯ãè€æ°ã®æå¹ãªåœ¢åŒãæã€æåçæŠå¿µãã¢ãã«åããã®ã«åœ¹ç«ã¡ãŸããäŸãã°ããæšæ¶ããšããæŠå¿µã¯ãæåãæèã«ãã£ãŠç°ãªãå ŽåããããŸããæšæ¶ã¯ãèšèã«ãããã¬ãŒãºã身äœçãªãžã§ã¹ãã£ãŒããŸãã¯æžãããã¡ãã»ãŒãžã§ããå¯èœæ§ããããŸãã
type Greeting = string | Gesture | WrittenMessage;
interface Gesture {
type: "handshake" | "bow" | "hug";
intensity: number; // Scale of intensity (e.g., firmness of handshake)
}
interface WrittenMessage {
format: "email" | "letter" | "text_message";
content: string;
}
ãã®åã¯ãæåçãªæ £è¡ã®å€æ§æ§ãåæ ããå¹ åºãæšæ¶ã衚çŸããããšãå¯èœã«ããŸãã
5. ã€ã³ã¿ãŒã»ã¯ã·ã§ã³åãšæåçæ··äº€æ§
ã€ã³ã¿ãŒã»ã¯ã·ã§ã³åã䜿çšãããšãè€æ°ã®åãåäžã®åã«çµåã§ããŸããããã¯ãç°ãªãäŒçµ±ã®èåã§ããæåçæŠå¿µãã¢ãã«åããã®ã«åœ¹ç«ã¡ãŸããäŸãã°ãããã¥ãŒãžã§ã³æçãã¯ãç°ãªãæçã®äŒçµ±ã®èŠçŽ ãçµã¿åããããã®ã§ãããããããŸããã
interface JapaneseDish {
ingredients: string[];
preparation: string;
presentation: string;
}
interface ItalianDish {
sauce: string;
pastaType: string;
cheese: string;
}
type FusionDish = JapaneseDish & ItalianDish;
const fusionDish: FusionDish = {
ingredients: ["Tofu", "Seaweed"],
preparation: "Stir-fry",
presentation: "Bento Box",
sauce: "Soy-based",
pastaType: "Udon",
cheese: "Parmesan"
};
ãã®åã¯ãæ¥æ¬æçãšã€ã¿ãªã¢æçã®äž¡æ¹ã®èŠçŽ ãçµã¿åãããæçã衚ããŸãã
TypeScript人é¡åŠã®å®çšçãªå¿çš
ã§ã¯ããã®ã¢ãããŒããå®éã«äœã«äœ¿ããã®ã§ããããïŒããã€ãã®æœåšçãªå¿çšäŸã以äžã«ç€ºããŸãã
1. æåçã«é æ ®ãããœãããŠã§ã¢ã®æ§ç¯
ã³ãŒãå ã§æåçæŠå¿µãæç€ºçã«ã¢ãã«åããããšã§ãç°ãªãæåçèæ¯ãæã€ãŠãŒã¶ãŒã®ããŒãºã奜ã¿ã«ãããé æ ®ãããœãããŠã§ã¢ãäœæã§ããŸããäŸãã°ããœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ã¯ãTypeScriptã®åã䜿çšããŠãã©ã€ãã·ãŒãšã³ãã¥ãã±ãŒã·ã§ã³ã«é¢ããç°ãªãæåèŠç¯ã衚çŸãããŠãŒã¶ãŒãããã«å¿ããŠäœéšãã«ã¹ã¿ãã€ãºã§ããããã«ããããšãã§ããŸããäžçäžã®æ¥ä»åœ¢åŒãèããŠã¿ãŠãã ãããæ¥ä»ã®è¡šç€ºæ¹æ³ãè§£éã¯ãæåã«ãã£ãŠåçã«ç°ãªããŸããåã·ã¹ãã ã¯ããããã®éãã管çããã®ã«åœ¹ç«ã¡ãŸãã
2. æåããŒã¿ã®åæ
TypeScriptã¯ãæåããŒã¿ãåæãããã¿ãŒã³ãåŸåãç¹å®ããããã«äœ¿çšã§ããŸããæåçããŒã¿ã»ãããTypeScriptã®åãšããŠãšã³ã³ãŒãããããšã§ãåãã§ãã¯ãšéçè§£æã䜿çšããŠäžæŽåãç°åžžãç¹å®ããé ããæŽå¯ãæããã«ããããšãã§ããŸããç°ãªãåœã ããã®ã³ãã¥ãã±ãŒã·ã§ã³ã¹ã¿ã€ã«ã«é¢ããå€§èŠæš¡ãªããŒã¿ã»ãããæ³åããŠã¿ãŠãã ãããTypeScriptã®åã䜿çšããŠãåã³ãã¥ãã±ãŒã·ã§ã³ã¹ã¿ã€ã«ãããããã®åœã®æåŸ ããã圢åŒãšããããã£ã«æºæ ããŠãããã確èªããããŒã¿å ¥åãšã©ãŒãç°åžžãªãã¿ãŒã³ãç¹å®ããããšãã§ããŸãã
3. æåæèã®æè²
TypeScriptã¯ãæåæèãæè²ããããã®ããŒã«ãšããŠäœ¿çšã§ããŸãããŠãŒã¶ãŒãç°ãªãæåçã·ããªãªãæ¢æ±ã§ããã€ã³ã¿ã©ã¯ãã£ããªã·ãã¥ã¬ãŒã·ã§ã³ãäœæããããšã§ãæåçãªéããšé¡äŒŒæ§ã«ã€ããŠããæ·±ãçè§£ãæ·±ããã®ã«åœ¹ç«ã¡ãŸããä»®æ³äº€æãã©ãããã©ãŒã ã¯ãTypeScriptã䜿çšããŠç°ãªãåœã®åŠçéã®äº€æµãã·ãã¥ã¬ãŒãããã³ãã¥ãã±ãŒã·ã§ã³ã¹ã¿ã€ã«ãæåŸ ã«ãããæåçãªãã¥ã¢ã³ã¹ã匷調ããããšãã§ããŸãã
4. åœéå (i18n) ãšããŒã«ãªãŒãŒã·ã§ã³ (l10n)
TypeScriptã¯ããœãããŠã§ã¢ãç°ãªãèšèªã«ç¿»èš³ãããã ãã§ãªããåã¿ãŒã²ããåžå Žã®æåçãã¥ã¢ã³ã¹ã«é©å¿ããããã«ããããã®éèŠãªåœ¹å²ãæããããšãã§ããŸããåã䜿çšããããšã§ãããŒã«ã©ã€ãºãããæååãæ¥ä»åœ¢åŒãé貚èšå·ããã®ä»ã®æååºæã®ããŒã¿ãå³å¯ã«åä»ãããäžè¬çãªãšã©ãŒãé²ããç°ãªããã±ãŒã«éã§äžè²«ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã確ä¿ã§ããŸããã«ã¹ã¿ã åã䜿çšããŠãç°ãªãåœã®ã¢ãã¬ã¹ã®æ§é ãã¢ãã«åããã¢ãã¬ã¹ãã©ãŒã ãæ£ããæ€èšŒããããšãã§ããŸãã
課é¡ãšéç
TypeScript人é¡åŠã¯é åçãªå¯èœæ§ãç§ããŠããŸããããã®éçãèªèããããšãéèŠã§ãã
- é床ã®åçŽåïŒæåã¯ä¿¡ããããªãã»ã©è€éã§åŸ®åŠã§ãããããå®å šã«ã³ãŒãã§æããããšããããšã¯ãæ¬è³ªçã«éå 䞻矩çã§ãã
- åèŠïŒç§ãã¡èªèº«ã®æåçåèŠããæå³ããå宣èšã«å¿ã³èŸŒã¿ãæå®³ãªã¹ãã¬ãªã¿ã€ããæ°žç¶ãããå¯èœæ§ããããŸãã
- ä¿å®ïŒæåèŠç¯ã¯æéã®çµéãšãšãã«é²åããŸããç§ãã¡ã®åã·ã¹ãã ã¯ããããã®å€åãåæ ããããã«åžžã«æŽæ°ãããå¿ èŠããããŸãã
- 䞻芳æ§ïŒæåçãªè§£éã¯ãã°ãã°äž»èгçã§ããç°ãªãå人ãåãæåçæŠå¿µã«å¯ŸããŠç°ãªãçè§£ãæã€ããšããããŸãã
TypeScript人é¡åŠã«ã¯è¬èããšãã®éçã«å¯Ÿããæ¹å€çèªèãæã£ãŠåãçµãããšãäžå¯æ¬ ã§ããç®æšã¯æåã®å®ç§ãªè¡šçŸãäœæããããšã§ã¯ãªããã³ãŒãããã®è€éããæ¢æ±ãçè§£ããããã®ããŒã«ãšããŠäœ¿çšããããšã§ãã
ã³ãŒãäŸïŒç°ãªãã¿ã€ã ãŸãŒã³ã®ã¢ããªã³ã°
å®çšçãªäŸãèããŠã¿ãŸããããã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã§ç°ãªãã¿ã€ã ãŸãŒã³ãæ±ãå Žåã§ããçŽ æŽãªã¢ãããŒãã¯ããã¹ãŠã®æéãåçŽã«UTCã§ä¿åããããšãããããŸãããããã¯æ©èœããŸãããçŸå°æéã®æåçãªéèŠæ§ãç¡èŠããŠããŸããTypeScriptã䜿çšããŠããããããæ£ç¢ºã«ã¢ãã«åã§ããŸãã
interface TimeZone {
name: string; // e.g., "America/Los_Angeles", "Europe/London", "Asia/Tokyo"
utcOffset: number; // Offset from UTC in minutes
daylightSavingTime: boolean; // Whether DST is observed
}
interface Event {
name: string;
time: Date;
timeZone: TimeZone;
}
// Function to display the event time in the user's local time zone
function displayEventTime(event: Event, userTimeZone: TimeZone): string {
const eventTimeInUTC = event.time.getTime() + (event.timeZone.utcOffset * 60 * 1000);
const userTime = new Date(eventTimeInUTC + (userTimeZone.utcOffset * 60 * 1000));
return userTime.toLocaleString();
}
// Example usage
const meeting: Event = {
name: "Global Team Meeting",
time: new Date("2024-01-20T16:00:00.000Z"), // 4 PM UTC
timeZone: {
name: "Europe/London",
utcOffset: 0,
daylightSavingTime: false
}
};
const userTimeZone: TimeZone = {
name: "America/Los_Angeles",
utcOffset: -480, // UTC-8
daylightSavingTime: true
};
console.log(displayEventTime(meeting, userTimeZone)); // Outputs the meeting time in Los Angeles time
ãã®äŸã¯ãTypeScriptã®åã䜿çšããŠã¿ã€ã ãŸãŒã³ã衚çŸãããããã®éã§æéãæ£ç¢ºã«å€æããæ¹æ³ã瀺ããŠããŸããããã¯åçŽãªäŸã§ãããæåçãªéããåŠçããããã®åã·ã¹ãã ã®åã瀺ããŠããŸãã
屿ïŒTypeScript人é¡åŠã®æªæ¥
TypeScript人é¡åŠã¯ãèšãç¥ããªãå¯èœæ§ãç§ããæ°èåéã§ãããœãããŠã§ã¢ããŸããŸãã°ããŒãã«åããçžäºæ¥ç¶ãããã«ã€ããŠãæåçã«ææã§é©å¿æ§ã®ããã·ã¹ãã ã®å¿ èŠæ§ã¯å¢å€§ããã°ããã§ããTypeScript人é¡åŠã®ååãåãå ¥ããããšã§ãæ©èœçã§ããã ãã§ãªãã倿§ãªæåçèŠç¹ãå°éããå æãããœãããŠã§ã¢ãäœæã§ããŸãã
ãã®åéã®å°æ¥ã®ç ç©¶ã§ã¯ãããŒã¿ããæåèŠç¯ãèªåçã«æšè«ããããã®æ©æ¢°åŠç¿ã®äœ¿çšãäžè¬çãªæåçæŠå¿µã衚çŸããããã®æšæºåãããåã©ã€ãã©ãªã®éçºãããã³éçºè ãã³ãŒãå ã®æåçåèŠãç¹å®ã軜æžããã®ã«åœ¹ç«ã€ããŒã«ã®äœæãæ¢æ±ãããå¯èœæ§ããããŸãã
çµè«
TypeScript人é¡åŠã¯ããœãããŠã§ã¢éçºã«å¯Ÿããæ¬æ°ã§æŽå¯ã«æºã¡ãã¢ãããŒããæäŸããŸããåã·ã¹ãã ãæåçæŠå¿µãåæã衚çŸããããã®ã¬ã³ãºãšããŠæããããšã§ãç§ãã¡ã¯ããæåçã«æèãé«ããé©å¿æ§ããããå æ¬çãªãœãããŠã§ã¢ãäœæã§ããŸãã課é¡ãšéçã¯ååšããŸããããã®ã¢ãããŒãã®æœåšçãªå©ç¹ã¯éèŠã§ãããã¯ãããžãŒãšæåã®äº€å·®ç¹ãæ¢æ±ãç¶ããäžã§ãTypeScript人é¡åŠã¯ãœãããŠã§ã¢éçºã®æªæ¥ã圢äœãäžã§ãŸããŸãéèŠãªåœ¹å²ãæãããšæåŸ ãããŸãã
ãã®æ¢æ±ã¯ã人é¡åŠè ã瀟äŒåŠè ã®ä»äºã眮ãæãããã®ã§ã¯ãªããäžçäžã®ãœãããŠã§ã¢ãœãªã¥ãŒã·ã§ã³ã®èšèšãšå®è£ ã«æåæèãçµ±åãããœãããŠã§ã¢ãšã³ãžãã¢ãã·ã¹ãã ã¢ãŒããã¯ãã®èœåãé«ãããã®ã§ããåã·ã¹ãã ãšããŒã¿ã¢ãã«ãæèçã«å®è£ ããããšã§ãçŸä»£æè¡ã®å€æ§ãªã°ããŒãã«ãŠãŒã¶ãŒããŒã¹å šäœã§ãå æ¬æ§ãå°éãçè§£ãä¿é²ããããšãã§ããŸãã